NVIDIA JetsonとUSBドングルでLTE(SORACOM Air)接続するために nmcli を使う
ども、ゲストのソラコム大瀧です。
NVIDIAのAI向けSBCのJetsonはエッジコンピューティングのデバイスとして人気ですね。最近発売されたJetson Xavier NXを入手したので、LTE通信のためのUSBドングルをセットしてSORACOM Airをセットアップしてみました。Raspberry PiなどでUSBドングル+SORACOM Airを利用するためのスクリプト setup_air.sh
がありますが、NVIDIAが公開しているJetson用LinuxイメージはUbuntu Serverであり、GNOMEとセットでNetwork Managerがプリインストールされているため、今回はNetwork ManagerのCLIツールである nmcli
でセットアップする様子をご紹介します。
動作確認環境
- Jetson Developer Kit
- Jetson Xavier NX Developer Kit
- SDカードイメージ
- nv-jetson-nx-sd-card-image-r32.4.2.zip
- jetson-nx-jp45-sd-card-image.zip
- USBドングル
- SORACOM Onyx LTE USB ドングル SC-QGLC4-C1
- HUAWEI MS2372h-607
USBドングルにSIMをセットし、JetsonのUSBポートに挿入、Jetsonを起動してSSHやターミナルでコマンドを実行できるようにしておきます。
今回の方法はLinuxでUSBモデムとして認識されるLTEドングルを対象としています。LTEドングルによってはネットワークインターフェースやルーターとして扱うものがあるので、それらの場合はLTEドングルの説明書の手順に従ってください。
USBドングルが認識されているかは、 nmcli
の以下のコマンドで確認できます。
$ nmcli device status DEVICE TYPE STATE CONNECTION eth0 ethernet connected Wired connection 1 l4tbr0 bridge connected l4tbr0 ttyUSB2 gsm disconnected -- wlan0 wifi disconnected -- dummy0 dummy unmanaged -- rndis0 ethernet unmanaged -- usb0 ethernet unmanaged -- lo loopback unmanaged --
SORACOM Onyx、MS2372ともにTYPE
がgsm
で認識されます。現在は切断(disconnected
)ということがわかりますね。
機種依存の事前準備
HUAWEI MS2372ドングルを利用する場合は、設定の前にATコマンドを実行しておきましょう。SORACOM Onyxドングルでは不要ですのでスキップしてください。他のUSBモデムでは、usb_modeswitch
で動作モードの切り替えが必要な場合があります。
$ sudo apt update $ sudo apt install screen $ sudo screen /dev/ttyUSB0 38400 # 複数のUSBデバイスを接続している場合、デバイスファイルの番号が変わることがあります。 dmesgなどで確認しておきましょう。 ATE1[Enter] # コマンド文字列は表示されません OK AT+CGDCONT=0,"IP","soracom.io"[Enter] OK [Ctrl]+[A] → [K] Really kill this window [y/n] y[Enter] $
これでOKです。
nmcliの実行
LTEドングルに接続設定soracom
をAPNを添えて追加します。
$ sudo nmcli connection add type gsm ifname "*" con-name soracom apn soracom.io user sora password sora Connection 'soracom' (68869acb-f705-479c-857d-4a8230bcb8c7) successfully added. $
大容量データ通信向けのSORACOM IoT SIM Plan-DUではAPNが異なるので、代わりに以下を実行します。
$ sudo nmcli connection add type gsm ifname "*" con-name soracom apn du.soracom.io user sora password sora Connection 'soracom' (0d2f2aad-33f3-4e61-808c-54deeee28051) successfully added. $
先ほどのデバイス一覧を再度確認しましょう。
$ nmcli device status DEVICE TYPE STATE CONNECTION eth0 ethernet connected Wired connection 1 l4tbr0 bridge connected l4tbr0 ttyUSB2 gsm connected soracom ppp0 ppp disconnected -- wlan0 wifi disconnected -- dummy0 dummy unmanaged -- rndis0 ethernet unmanaged -- usb0 ethernet unmanaged -- lo loopback unmanaged -- $
gsm
のデバイスに、追加した接続soracom
がセットされステータスがconnected
になりました。デバイス名で状態を確認してみると...
$ nmcli device show ttyUSB2 GENERAL.DEVICE: ttyUSB2 GENERAL.TYPE: gsm GENERAL.HWADDR: (unknown) GENERAL.MTU: 1500 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: soracom GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/6 IP4.ADDRESS[1]: 10.189.163.250/32 IP4.GATEWAY: 0.0.0.0 IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 0.0.0.0, mt = 700 IP4.ROUTE[2]: dst = 100.64.0.0/10, nh = 0.0.0.0, mt = 700 IP4.DNS[1]: 100.127.0.53 IP4.DNS[2]: 100.127.1.53
LTEドングルにIPアドレスが割り当てられているのがわかります。
(オプション) 他のネットワークインターフェースとの併用
有線LANやWi-Fi、USB Device ModeなどJetsonには複数のネットワークインターフェースがあります。それぞれ自動構成の場合デフォルトゲートウェイが設定され、メトリック値によって優先順位が決まり、最も優先度の高い(メトリック値の小さい)デフォルトゲートウェイが採用されます。
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 0.0.0.0 0.0.0.0 0.0.0.0 U 700 0 0 ppp0 0.0.0.0 192.168.55.100 0.0.0.0 UG 32766 0 0 l4tbr0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.55.0 0.0.0.0 255.255.255.0 U 0 0 0 l4tbr0 $
ルーティングテーブルでは、LTEドングルのインターフェース名はpppX
です。
この構成では、eth0
に向いていますね(Destination
が0.0.0.0
のうち、eth0
のMetric
列の値100
が最も小さい)。SORACOM AirのLTE回線でインターネットにアクセスしたい場合は、併用する他のネットワークインターフェースのデフォルトゲートウェイを無効にするなど、調整が必要です。
一方で、通常のインターネットアクセスはeth0
にしつつ、SORACOM NapterやSORACOM GateでXavier NXに遠隔からアクセスできる構成にしたいこともあるでしょう。それぞれ以下のネットワークルーティングをルーティングテーブルに追加することで対応出来ます。
- SORACOM NapterなどのSORACOMサービス :
100.64.0.0/10
- SORACOM Gate : VPGデバイスサブネット(デフォルトでは
10.128.0.0/9
)
システムレベルで静的ルーティングを設定する他に、Network Managerがインターフェースの状態に合わせて動的にルーティングを追加することもできるので、今回はnmcli
コマンドでNetwork Managerによる設定を試してみます。
SORACOM NapterなどのSORACOMサービスに対応する例
$ sudo nmcli connection modify soracom +ipv4.routes "100.64.0.0/10"
SORACOM Gateに対応する例
$ sudo nmcli connection modify soracom +ipv4.routes "10.128.0.0/9"
これでOKです。設定を反映させるために、切断→再接続を行います。
$ sudo nmcli connection down soracom Connection 'soracom' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5) $ sudo nmcli connection up soracom Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) $ route -n # 今回は100.64.0.0/10を追加しました Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 0.0.0.0 0.0.0.0 0.0.0.0 U 700 0 0 ppp0 0.0.0.0 192.168.55.100 0.0.0.0 UG 32766 0 0 l4tbr0 100.64.0.0 0.0.0.0 255.192.0.0 U 700 0 0 ppp0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.55.0 0.0.0.0 255.255.255.0 U 0 0 0 l4tbr0
ルーティングテーブルに追加したルートがあることを確認しました。こうすることでデフォルトルートが他のネットワークインターフェースに向いていても、ロンゲストマッチで100.64.0.0/10
宛の通信はLTEドングルのインターフェースに向きます。SORACOMにはping
に応答するサーバpong.soracom.io
があるので、ping
で動作確認してみましょう。
$ ping pong.soracom.io PING pong.soracom.io (100.127.100.127) 56(84) bytes of data. 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=1 ttl=64 time=426 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=2 ttl=64 time=306 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=3 ttl=64 time=325 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=4 ttl=64 time=314 ms ^C --- pong.soracom.io ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3002ms rtt min/avg/max/mdev = 306.072/343.042/426.721/48.786 ms $
疎通できていることがわかりますね。
まとめ
NVIDIA JetsonとUSBドングルでLTE(SORACOM Air)接続するためにnmcli
を使う様子をご紹介しました。OS標準機能で対応できるのは手軽で良いですね。
Xavier NXのブログを同時公開しています
本記事の他にもXavier NXの記事(ただし機械学習ではなくシステム構成のTips)を同時に2本公開しています、こちらもどうぞ!
- NVIDIA Jetson Xavier NXをHDMI接続せずにHeadlessでセットアップする | Developers.IO
- NVIDIA Jetson Xavier NXのシステムボリュームをNVMe SSDに切り替える | Developers.IO